package com.gaussian.property.module.biz.mapper;

import com.gaussian.property.module.biz.entity.ProjectCheckStandardScore;
import com.gaussian.property.module.biz.vo.check.CheckStandardScoreQueryCondition;
import com.gaussian.property.module.biz.vo.check.ProjectCheckStandardScoreDto;
import com.songqi.common.mybatis.core.mapper.BaseMapperX;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.time.LocalDateTime;
import java.util.List;

/**
 * <p>
 * 标准打分记录明细。即每一个标准对应的扣分记录 Mapper 接口
 * </p>
 *
 * @author songqi(13776346982)
 * @since 2024-04-10
 */

@Mapper
public interface ProjectCheckStandardScoreMapper extends BaseMapperX<ProjectCheckStandardScore> {


    /**
     *  查询项目稽核中模块在一段时间范围的扣分总和
     * @param projectId
     * @param checkTableId
     * @param checkModuleId
     * @param startTime
     * @param endTime
     * @return
     */
    Double sumModuleDeduction(@Param("projectId") String projectId,
                              @Param("checkTableId") String checkTableId,
                              @Param("checkModuleId") String checkModuleId,
                              @Param("startTime") LocalDateTime startTime,
                              @Param("endTime") LocalDateTime endTime);


    /**
     * 查询项目稽核中指标在一段时间范围的扣分总和
     * @param projectId
     * @param checkTableId
     * @param checkCriteriaId
     * @param startTime
     * @param endTime
     * @return
     */
    Double sumCriteriaDeduction(@Param("projectId") String projectId,
                               @Param("checkTableId") String checkTableId,
                               @Param("checkCriteriaId") String checkCriteriaId,
                               @Param("startTime") LocalDateTime startTime,
                               @Param("endTime") LocalDateTime endTime);


    /**
     *  查询项目稽核中标准在一段时间范围的扣分总和
     * @param projectId
     * @param checkTableId
     * @param checkStandardId
     * @param startTime
     * @param endTime
     * @return
     */
    Double sumStandardDeduction(@Param("projectId") String projectId,
                                @Param("checkTableId") String checkTableId,
                                @Param("checkStandardId") String checkStandardId,
                                @Param("startTime") LocalDateTime startTime,
                                @Param("endTime") LocalDateTime endTime);


    /**
     * （未使用过）查询项目稽核中标准在一段时间范围的扣分次数
     * @param projectId
     * @param checkTableId
     * @param checkStandardId
     * @param startTime
     * @param endTime
     * @return
     */
    Long countStandardCheckRecord(@Param("projectId") String projectId,
                                  @Param("checkTableId") String checkTableId,
                                  @Param("checkStandardId") String checkStandardId,
                                  @Param("startTime") LocalDateTime startTime,
                                  @Param("endTime") LocalDateTime endTime);



    /**
     * 查询标准评分明细
     * @param queryCondition
     * @return
     */
    List<ProjectCheckStandardScoreDto> queryStandardScore(@Param("param") CheckStandardScoreQueryCondition queryCondition);

    /**
     * 查询有效的标准评分明细。扣/得分!=0或备注不为空或有图片
     * @param queryCondition
     * @return
     */
    List<ProjectCheckStandardScoreDto> queryValidStandardScore(@Param("param") CheckStandardScoreQueryCondition queryCondition);
}
